package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 使用文件输入流读取字节数据
 */
public class FISDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("fos.dat");
        /*
            InputStream上定义了读取一个字节的方法:
            int read()
            读取一个字节并将其返回。返回的int值2进制的"低8位"就是读取到的字节数据。
            如果返回的int值为整数-1则表示流读取到了末尾。



            00000000     0
            11111111     255

            补码:有符号的表示数字，第一位是符号位，0表示整数，1表示负数
            0 0000000      0
              |-数据-|

            0 1111111     127

            1 1111111     -1
            1 1111110     -2
            1 1111101     -3
            1 1111100     -4
              数据最大
            1 0000000     -128

            负数计算:2进制取反+1
            11111111      第一位是1，说明是负数

            2进制取反
            00000000      整数0

            再+1
            00000001      整数1

            整体结果就是-1



            例如:
            1 0000000    -128

            short:数据位15位
            0 0000000 00000000

            int:31位 2的31次方-1
            0 1111111 11111111 11111111 11111111

            int型整数-1的2进制
            1 1111111 11111111 11111111 11111111
         */
        /*
            fos.dat文件数据:
            00000001 00000010
            ^^^^^^^^

            d:00000000 00000000 00000000 00000001
             |--------补24个0----------|  读取的字节
         */
        int d = fis.read();
        System.out.println(d);//1
         /*
            fos.dat文件数据:
            00000001 00000010
                     ^^^^^^^^

            d:00000000 00000000 00000000 00000010
             |--------补24个0----------|  读取的字节
         */
        d = fis.read();
        System.out.println(d);//2

        /*
            fos.dat文件数据:
            00000001 00000010 文件末尾
                              ^^^^^^^^

            d:11111111 11111111 11111111 11111111
              32位2进制都是1就是int型的整数-1
         */
        d = fis.read();
        System.out.println(d);//-1

        fis.close();
    }
}






